/*
 * Created by SharpDevelop.
 * User: David
 * Date: 2006-12-25
 * Time: 01:32
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */

using System;

using Labb4.Pooman.Cards;
using Labb4.Pooman.Players;
using Labb4.Pooman.Game;

namespace Labb4.Rules
{
	/// <summary>
	/// Base class for the current rules
	/// </summary>
	public abstract class SetOfRules
	{
		#region constructors
		
		/// <summary>
		/// Constructor, does nothing (do I have to declare it then?)
		/// </summary>
		public SetOfRules()
		{
		}
		
		#endregion
		
		#region virtuals
		
		/// <summary>
		/// Deals cards to a player
		/// This method should only have an implementation in phase 1
		/// </summary>
		/// <param name="player">The player to deal a card to</param>
		/// <param name="poo">Reference to the current instance of PoomanMain</param>
		public virtual void PerformDealCards(Player player, PoomanMain poo)
		{
		}
		
		#endregion
		
		#region abstracts
		
		/// <summary>
		/// Checks what cards are playable. Implemented differently depending on what phase the game is in
		/// </summary>
		/// <param name="cards">The cards to check</param>
		/// <param name="round">Reference to the current round</param>
		/// <param name="trumph">Reference to the current trump</param>
		/// <returns></returns>
		public abstract CardPile PerformCheckForPlayability(CardPile cards, Round round, Trump trump);
		
		#endregion
	}
}
